package cn.iocoder.yudao.module.enterprise.service.praxisProject;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.enterprise.controller.admin.praxisProject.vo.*;
import cn.iocoder.yudao.module.enterprise.dal.dataobject.praxisProject.EnterpriseProjectDO;

import javax.validation.Valid;
import java.util.List;

/**
 * 实践项目 Service 接口
 *
 * @author 管理员
 */
public interface EnterpriseProjectService {

    /**
     * 创建实践项目
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createPraxisProject(@Valid EnterpriseProjectVO createReqVO);

    /**
     * 更新实践项目
     *
     * @param updateReqVO 更新信息
     */
    void updatePraxisProject(@Valid EnterpriseProjectVO updateReqVO);

    void submitPraxisProject(Long id);

    /**
     * 删除实践项目
     *
     * @param id 编号
     */
    void deletePraxisProject(Long id);

    void revertPraxisProject(Long id);

    /**
     * 获得实践项目
     *
     * @param id 编号
     * @return 实践项目
     */
    EnterpriseProjectVO getPraxisProject(Long id);

    EnterpriseProjectCountVO getPraxisProjectCount(Long id);

    void saveProjectScheduleVO(EnterpriseProjectVO projectVO);

    void updateShowFlag(Long id);

    /**
     * 获得实践项目列表
     *
     * @return 实践项目列表
     */
    List<EnterpriseProjectPageRespVO> getPraxisProjectList(String title,Integer queryType);

    List<EnterpriseProjectRecordVO> getRecordByProjectId( Long id);

    PageResult<EnterpriseFeedBackVO> getFeedBackPageByProjectId(EnterpriseFeedBackPageReqVO pageVO);

    /**
     * 获得实践项目分页
     *
     * @param pageReqVO 分页查询
     * @return 实践项目分页
     */
    PageResult<EnterpriseProjectPageRespVO> getPraxisProjectPage(EnterpriseProjectPageReqVO pageReqVO);


    PageResult<EnterpriseEntryInfoPageRespVO> getEntryInfoPage(EnterpriseEntryInfoPageReqVO pageReqVO);

    PageResult<EnterpriseEntryStudentPageRespVO> getEntryInfoPageByProjectId(EnterpriseEntryStudentPageReqVO pageReqVO);

    List<EnterpriseEntryStudentPageRespVO> getEntryInfoPageByProjectList(EnterpriseEntryStudentExcelReqVO pageReqVO);

   void updateRateScore( EnterpriseProjectSourceUpdateVO updateVO);

   void batchUpdateStatus( EnterpriseProjectUpdateVO updateVO);

    List<EnterpriseEntryStudentVO> getEntryStudentList(Long entryId);

    EnterpriseEntryInfoBaseVO getEntryInfoById(Long id);

    EnterpriseProjectScheduleVO getNextScheduleByProjectId( Long projectId,Integer scheduleType);

    String validateScheduleTime(List<EnterpriseProjectScheduleVO> scheduleVOList ,int type);

    String validateUpdateSchedule(List<EnterpriseProjectScheduleVO> scheduleVOList ,Long projectId);

    Integer getProjectCountByTitle(  String title, Long id);
}
